package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.system.domain.PStoreOrder;
import com.ruoyi.system.domain.bo.*;
import com.ruoyi.system.domain.vo.PStoreOrderVo;
import com.ruoyi.system.domain.vo.PreOrderVo;
import com.ruoyi.system.domain.vo.StoreOrderDetailResponse;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 订单Service接口
 *
 * @author ruoyi
 * @date 2022-08-01
 */
public interface IPStoreOrderService {

    /**
     * 查询订单
     */
    PStoreOrderVo queryById(Long id);

    /**
     * 查询订单列表
     */
    TableDataInfo<PStoreOrderVo> queryPageList(PStoreOrderBo bo, PageQuery pageQuery);

    /**
     * 查询订单列表
     */
    List<PStoreOrderVo> queryList(PStoreOrderBo bo);

    /**
     * 修改订单
     */
    Boolean insertByBo(PStoreOrderBo bo);

    /**
     * 修改订单
     */
    Boolean updateByBo(PStoreOrderBo bo);

    /**
     * 校验并批量删除订单信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * pc-查询订单
     */
    TableDataInfo<StoreOrderDetailResponse> queryPageMyList(PStoreOrderBo bo, PageQuery pageQuery);

    /**
     * 前端-预下单
     */
    Map<String, Object> preOrder(PreOrderVo request);

    /**
     * 前端-加载预下单信息
     * @param preOrderNo 预下单号
     * @return 预下单信息
     */
    PreOrderResponse loadPreOrder(String preOrderNo);

    /**
     * 前端-创建订单
     * @param orderRequest 创建订单请求参数
     * @return MyRecord 订单编号
     */
    Map<String, Object> createOrder(CreateOrderRequest orderRequest);

    /**
     * 前端-订单列表
     */
    TableDataInfo<OrderDetailResponse> queryPageMyFontList(PStoreOrderBo bo, PageQuery pageQuery);

    /**
     * 前端-订单详情
     */
    StoreOrderDetailInfoResponse detailOrder(Long id);

    /**
     * 前端-取消订单
     */
    void cancelOrder(PStoreOrderBo bo);

    /**
     * 前端-订单收获
     */
    void takeOrder(PStoreOrderBo bo);

    /**
     * 积分兑换记录
     * @param pageQuery
     * @return
     */
    TableDataInfo<PStoreOrder> integralRecordList(PageQuery pageQuery);

    /**
     * 商城购物车下单
     * @param bo
     */
    void insertOrderByBo(POrderBo bo);

    /**
     * 获取商城订单信息
     * @param orderId
     * @return
     */
    List<PStoreOrder> orderDetail(String orderId);

    /**
     * 商城订单支付回调
     */
    void askPayOk(List<PStoreOrder> orders);

    /**
     * 商城订单详情
     */
    List<PStoreOrder> shopOrderDetail(String orderId);

    /**
     * 商城余额购买
     * @param bo
     */
    void blanceShop(POrderBo bo);

    /**
     * 积分兑换
     * @param bo
     */
    void integralShop(POrderBo bo);

    /**
     * 商城个人中心
     * @return
     */
    Map<String, Object> shopPersonCenter();

    /**
     * 商城我的订单列表
     * @return
     */
    List<PStoreOrder> shopOrderList(String ind, PageQuery pageQuery);

    /**
     * 申请退款
     */
    void refundApply(PStoreOrder storeOrder);
}
